{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# Finite Differences for Boundary Value Problems"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "import matplotlib.pyplot as pt\n",
        "\n",
        "import scipy.sparse as sps"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "We'll solve\n",
        "\n",
        "$u''+1000(1+x^2)u=0$ on $(-1,1)$\n",
        "\n",
        "with $u(-1)=3$ and $u(1)=-3$."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 20,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "#n = 9\n",
        "n = 200\n",
        "\n",
        "mesh = np.linspace(-1, 1, n)\n",
        "h = mesh[1] - mesh[0]"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Use `sps.diags(values, offsets=..., shape=(n, n))` to make a centered difference matrix."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 30,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "A = sps.diags(\n",
        "    [1,-2,1],\n",
        "    offsets=[-1,0,1], \n",
        "    shape=(n, n))\n",
        "\n",
        "if n < 10:\n",
        "    print(A.todense())"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Create `second_deriv` as a matrix to apply the second derivative. Can only do that for the interior points!\n",
        "\n",
        "* change `shape` and offsets\n",
        "* Take `h` into account"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 31,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "second_deriv = sps.diags(\n",
        "    [1,-2,1],\n",
        "    offsets=np.array([-1,0,1])+1,\n",
        "    shape=(n-2, n))/h**2\n",
        "\n",
        "\n",
        "if n < 10:\n",
        "    print(second_deriv.todense())"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Make a matrix for the lower-order term."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 32,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "factor = sps.diags(\n",
        "    [1000*(1 + mesh[1:]**2)],\n",
        "    offsets=[1],\n",
        "    shape=(n-2, n))\n",
        "\n",
        "if n < 10:\n",
        "    print(mesh[1:-1])\n",
        "    print()\n",
        "    print(factor.todense())"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Build the matrix for the interior:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 24,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "A_int = second_deriv+factor\n",
        "\n",
        "if n < 10:\n",
        "    print(A_int.todense())"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Glue on the rows for the boundary conditions:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 25,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "A = sps.vstack([\n",
        "    sps.coo_matrix(([1], ([0],[0])), shape=(1, n)),\n",
        "    A_int,\n",
        "    sps.coo_matrix(([1], ([0],[n-1])), shape=(1, n)),\n",
        "    ])\n",
        "A = sps.csr_matrix(A)\n",
        "\n",
        "if n < 10:\n",
        "    print(A.todense())"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Next, assemble the right-hand side as `rhs`:\n",
        "\n",
        "Pay special attention to the boundary conditions. What entries of `rhs` do they correspond to?"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 26,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "rhs = np.zeros(n)\n",
        "rhs[0] = 3\n",
        "rhs[-1] = -3"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "To wrap up, solve and plot:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 27,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "import scipy.sparse.linalg as sla\n",
        "\n",
        "sol = sla.spsolve(A, rhs)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 28,
      "metadata": {
        "collapsed": false
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7fee957500f0>]"
            ]
          },
          "execution_count": 28,
          "metadata": {},
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "pt.plot(mesh, sol)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": []
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": []
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.7.3rc1"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 2
}